import java.util.List;

import org.joda.time.DateTime;


public class Empleado {
	
	private String nombre;
	private String apellido;
	private int legajo;
	private List<Disponibilidad> disponibilidades;
	private List<DateTime> excepciones;
	private List<DateTime> restricciones;
	
	
	
	public boolean puedeIr(DateTime fecha, int desde, int hasta){
		if(tieneDisponibilidad(fecha, desde, hasta) || tieneExcepcion(fecha)){
			/**
			 * tirar advertencia
			 */
		}
		return (noTieneRestriccion(fecha));
		           
	}

	public boolean tieneExcepcion(DateTime fecha) {
		return this.excepciones.contains(fecha);
	}

	public boolean tieneDisponibilidad(DateTime fecha, int desde, int hasta) {
		/**
		 * excepcion: desde < hasta, por ejemplo 15-13 hs esta mal
		 */
		
		for(Disponibilidad disp : this.disponibilidades){
			if(fecha.dayOfWeek().equals(disp.getDia())){
				return disp.getDesde() >= desde && disp.getHasta() <= hasta;
			};
		};
		return false;
	}

	public boolean noTieneRestriccion(DateTime fecha) {
		boolean ret = false;
		for(DateTime d : this.restricciones){
			ret = d.getDayOfYear()==fecha.getDayOfYear();
			if(ret){
				break;
			}
		}
		return ret;
	}
	
	public void agregarRestriccion(DateTime fecha){
		this.restricciones.add(fecha);
	}
	
	public void agregarExcepcion(DateTime fecha){
		this.excepciones.add(fecha);
	}
	
	public void agregarDisponibilidad(Disponibilidad disp){
		this.disponibilidades.add(disp);
	}
	
}
